iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0

在圖形介面早已成為主流的今天,開發者的工作依然離開不了終端機。不管是連進雲端伺服器管理系統服務、使用 git 控管程式碼,還是在 CI/CD 中串接 Shell 命令,文字介面一直都是自動化與系統管理的共通語言。

這種透過輸入文字命令、由系統執行並印回結果的互動方式,就是 CLI(Command Line Interface,命令列介面)。也正因為操作全靠純文字與標準介面溝通,它在實務中展現了圖形介面難以取代的核心優勢:

  • 自動化與可重複執行:CLI 可以直接寫進腳本,被 CI/CD pipeline、排程任務或自動化工具呼叫,不需要人工在圖形介面中逐步點擊選單。
  • 輕量的遠端維運:CLI 只傳輸與處理純文字,對網路頻寬與系統資源需求極低。透過 ssh 執行服務管理與日誌檢查極為有效率。
  • 管道串接與工具組合:CLI 遵循 Unix 哲學,每個工具專注做好一件事,並透過標準輸出(stdout)與管道(pipe)將結果丟給下一個工具處理,快速組合出靈活的處理流程。

隨著 AI Agent 的普及,CLI 的角色正經歷一場重要的演變。純文字、標準輸入輸出與高可組合性的特性,讓 CLI 不再只是人類工程師操作系統的工具,也成為 AI Agent 理解環境、執行命令與進行自我修正的最佳介面。

以現在常見的 Claude Code、Codex 來說,當它們在處理開發任務時,背後其實就是不斷在調用各種 CLI:執行指令取得專案狀態、依據 Exit Code 判斷是否成功,並在出錯時根據回傳訊息進行自我修正。這種標準化的文字互動與反饋機制,讓 CLI 成為開放給模型操作時最理想的介面。

除了操作既有系統命令,許多團隊也開始透過 CLI 介面讓 AI 操作自己的產品。有些 CLI 原本主要供開發者操作,後來加入結構化輸出等適合 AI 呼叫的介面;有些則以 AI 或自動化執行為主要使用情境。GitHub CLI、Stripe CLI、Grafana CLI、Playwright CLI,都是從 Shell 操作產品功能的例子。

兼顧 Human-friendly 與 Agent-friendly 的雙重介面

受眾的轉變,代表現代 CLI 工具必須同時兼顧兩種完全不同的設計取向:

  • Human-friendly(人類友善):提供清晰的格式化表格、顏色標示、幫助訊息(--help)、自動完成與選單互動,讓人類易於閱讀與操作。
  • Agent-friendly(AI 友善):提供非互動(non-interactive)執行路徑、--json 結構化輸出,以及標準化的 Exit Code 與 stderr,讓 AI 能精準解析並進行失敗時的自我修正。

CLI 比 API 更適合 AI 工具的原因

多數服務本來就有一套現成的 REST API,直覺上似乎直接把 API 規格丟給 AI 呼叫最省事。但在實務上,直接讓 AI 打 REST API 會面臨幾個問題:AI 需要在 context 裡載入龐大的 API 文件、自己拼裝 Header 與處理 Token 更新,而且各家 API 的錯誤回應結構並不一致。

改以 CLI 作為中間介面,能替 AI 隱藏 REST API 的呼叫細節與驗證複雜度。AI 除了天生具備本地上下文與管道串接能力之外,CLI 相比傳統 API 在 AI 協作上展現了幾項優勢:

AI 組命令比組 API 請求更接近 LLM 的母語。 LLM 的訓練資料裡有大量 Shell 命令。所以讓模型寫出 kubectl get pods -n dev -o json 這種命令,是它看過無數次的形狀。相對地,要它照著某個自定義 API spec 拼出正確的 JSON body、header、處理身分驗證,這種樣本在訓練資料裡少得多,出錯的機會也就更高。

工具會自己說明自己。 幾乎每個 CLI 都會設計 --help,會印出有哪些子命令、每個參數是什麼意思。這代表 AI 不需要你事先把一份 API spec 塞進它的 context——它可以自己跑 mytool --helpmytool sub --help 當場把功能問出來。工具的說明跟工具本身綁在一起,不會有版本對不上的問題。

回饋是標準化的。 每個命令結束都有 Exit Code(0 成功、非 0 失敗),輸出分成 stdout 和 stderr 兩條管道。這組訊號是作業系統層級的約定,不管哪個工具都一樣,AI 靠它就能判斷「成功了沒、錯在哪」。而 API 就算失敗,也可能回你 HTTP 200、把錯誤藏在 JSON 的 "status": "error" 裡,反而容易誤判。更實際的是:CLI 失敗會把完整命令和 stderr 印在你眼前,你可以直接把那行複製起來,貼進自己的終端機重跑、加 --help 除錯。

認證可以沿用本地現成的機制。 很多 CLI 會把登入狀態存在本地:gh auth login 之後 token 存在設定檔、aws~/.aws/credentialskubectl~/.kube/config。AI 呼叫這些工具時,認證早就處理好了,它不用碰 token、也不用把憑證放進 prompt。若讓 AI 直接打 API,OAuth、token 刷新這些邏輯就得自己處理。

控制 Token 開銷與上下文長度。 LLM 依 Token 用量計費。CLI 可以將大檔或複雜執行結果寫入磁碟,僅向 AI 回傳檔案路徑,AI 只有在需要時才讀取部分內容。例如執行日誌查詢或大量資料比對時,CLI 可以將完整結果存成本地檔案並回傳路徑,讓 AI 依需求只讀取關鍵段落,避免把整份輸出塞進對話框而產生不必要的 Token 開銷。

本系列學習重點

這個系列帶你從基礎語法到實務設計,建立一套完整的 CLI 開發知識體系。分為五個主題:

  1. 基礎與語法結構

    • 終端機、Shell 與 CLI 程式的分工
    • 用 Go 與 Cobra 實作子命令、Args 與 Flag
    • Flag、環境變數與設定檔的優先權共存
    • 管道(stdin/stdout)與重導向操作
  2. Human-friendly 與 Agent-friendly 雙重介面

    • 人類友善介面:表格、顏色、動態進度條、Shell 自動完成與 REPL 模式
    • Agent 友善介面:非互動執行路徑、--json 結構化輸出與 stderr 自我修正機制
  3. 架構設計與網路通訊

    • Command、業務邏輯與通訊層的分工
    • 將 REST API 重新封裝為意圖導向 CLI
    • WebSocket 雙向通訊、OAuth 2.0 PKCE 登入與 AI 串流對話
    • CLI 逾時控制、取消機制
  4. 終端機底層與 TUI 實作

    • 從零打造一個簡單的文字編輯器
    • 理解 Raw Mode 鍵盤輸入與 ANSI 游標控制
    • Viewport 檔案滾動展示與 Undo/Redo 文字編輯
  5. 測試與發佈

    • 單元測試
    • 搭配 GoReleaser 發佈至 npm

準備好你的開發環境,讓我們一起開始吧!


下一篇
命令進入 CLI 程式前:終端機、Shell 與 OS 的運作原理
系列文
30 天學會做一個 CLI:打造人類與 AI 都友善的現代 CLI 應用2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言